package 集合.map集合;
/*
     1.Map用于保存映射关系的数据：key - value
     2.Map中的key和value可以是任何引用类型的数据，会封装到HashMap$Node对应的数组中
     3.Map中的key不允许重复
     4.Map中的value可以重复,允许使用null键和null值
     5.如果添加相同的key，则会覆盖原理的key-value,等同于修改
     6.和HashSet一样，不保证映射的顺序，底层是通过hash值确定其存放位置的 (底层是数组 + 链表 + 红黑树)
     7.HashMap没有实现同步，因此是线程不安全的

 */

import java.util.*;

public class HashMap02 {
    public static void main(String[] args) {
        HashMap<Object, Object> map = new HashMap<>();
        map.put("name","Tom");
        map.put("age",12);
        map.put("type",true);
        Set<Map.Entry<Object, Object>> entries = map.entrySet();

        System.out.println(map.get("type"));
        System.out.println("=====================");
        //第一种：先取出所有的key,通过key取出对应的value
        //增强for循环
        Set<Object> keySet = map.keySet();
        for (Object key: keySet){
            System.out.println(map.get(key));
        }
        System.out.println("=====================");
        //迭代器
        Iterator<Object> iterator = keySet.iterator();
        while (iterator.hasNext()) {
            Object key =  iterator.next();
            System.out.println(map.get(key));

        }
        System.out.println("=====================");
        Collection<Object> values = map.values();
        for(Object value: values){
            System.out.println(value);
        }
        System.out.println("=====================");
        //通过EntrySet，获取 k - v
        Set<Map.Entry<Object, Object>> entrySet = map.entrySet();
        for(Object entry: entrySet){
            Map.Entry<Object,Object> entry1 = (Map.Entry) entry;
            System.out.println(entry1.getKey());
            System.out.println(entry1.getValue());
        }
    }
}
